/**
 * 
 */
package br.com.skynix.tcmc.service.seguranca.usuarios;

import javax.persistence.NoResultException;
import javax.persistence.TypedQuery;

import org.springframework.stereotype.Repository;

import br.com.skynix.tcmc.base.spring.AbstractDao;
import br.com.skynix.tcmc.model.seguranca.Usuario;
import br.com.skynix.tcmc.util.WebUtil;

/**
 * @author mgrb
 * 
 */
@Repository
public class UsuarioDao extends AbstractDao<Usuario> {

	/**
	 * @param usuario
	 * @return
	 */
	public boolean isCredentialValid(Usuario usuario) {

		TypedQuery<Usuario> query = entityManager
				.createQuery(
						"SELECT OBJECT(usr) FROM Usuario usr WHERE usr.username = :username",
						Usuario.class);
		query.setParameter("username", usuario.getUsername());
		try {
			Usuario usr = query.getSingleResult();
			return usr == null ? false : WebUtil.checkPassword(
					usuario.getPassword(), usr.getPassword());
		}
		catch (NoResultException exception) {
			return false;
		}
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * br.com.skynix.tcmc.base.spring.AbstractDao#inserir(br.com.skynix.tcmc
	 * .base.model.EntidadeAuditavel)
	 */
	@Override
	public Long inserir(Usuario entidade) {
		entidade.setPassword(WebUtil.encryptPassword(entidade.getPassword()));
		return super.inserir(entidade);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * br.com.skynix.tcmc.base.spring.AbstractDao#alterar(br.com.skynix.tcmc
	 * .base.model.EntidadeAuditavel)
	 */
	@Override
	public void alterar(Usuario entidade) {
		entidade.setPassword(WebUtil.encryptPassword(entidade.getPassword()));
		super.alterar(entidade);
	}

}
